package com.example.leetcode.prcatice;

/**
 * 给你一个正整数 n ，请你找出符合条件的最小整数，其由重新排列 n 中存在的每位数字组成，并且其值大于 n 。如果不存在这样的正整数，则返回 -1 。
 *
 * 注意 ，返回的整数应当是一个 32 位整数 ，如果存在满足题意的答案，但不是 32 位整数 ，同样返回 -1 。
 *
 *  
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/next-greater-element-iii
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class Test556 {


    public int nextGreaterElement(int n) {
        String s = "" + n;
        char[] chars = s.toCharArray();
        int i = chars.length -1;
        while (i >=0 && chars[i] >= chars[i + 1]){
            i -- ;
        }
        if (i < 0){
            return -1;
        }
        int j = chars.length -1;
        while (j >= 0 && chars[i] >= chars[j]){
            j--;
        }
        swap(chars,i,j);
        reverse(chars, i+ 1);
        long l = Long.parseLong(new String(chars));
        return l > Integer.MAX_VALUE ? -1:(int)l;

    }

    public void reverse(char[] nums, int begin) {
        int i = begin, j = nums.length - 1;
        while (i < j) {
            swap(nums, i, j);
            i++;
            j--;
        }
    }

    public void swap(char[] nums, int i, int j) {
        char temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }



}
